// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
 ******************************************************************************
 * Copyright (C) 2007, International Business Machines Corporation and   *
 * others. All Rights Reserved.                                               *
 ******************************************************************************
 */

package com.ibm.icu.impl.duration;

/**
 * Abstract factory interface used to create PeriodFormatters. PeriodFormatters are immutable once
 * created.
 *
 * <p>Setters on the factory mutate the factory and return it, for chaining.
 */
public interface PeriodFormatterFactory {

    /**
     * Set the name of the locale that will be used when creating new formatters.
     *
     * @param localeName the name of the Locale
     * @return this PeriodFormatterFactory
     */
    public PeriodFormatterFactory setLocale(String localeName);

    /**
     * Set whether limits will be displayed.
     *
     * @param display true if limits will be displayed
     * @return this PeriodFormatterFactory
     */
    public PeriodFormatterFactory setDisplayLimit(boolean display);

    /**
     * Set whether past and future will be displayed.
     *
     * @param display true if past and future will be displayed
     * @return this PeriodFormatterFactory
     */
    public PeriodFormatterFactory setDisplayPastFuture(boolean display);

    /**
     * Set how separators will be displayed.
     *
     * @param variant the variant indicating how separators will be displayed
     * @return this PeriodFormatterFactory
     */
    public PeriodFormatterFactory setSeparatorVariant(int variant);

    /**
     * Set the variant of the time unit names to use.
     *
     * @param variant the variant to use
     * @return this PeriodFormatterFactory
     */
    public PeriodFormatterFactory setUnitVariant(int variant);

    /**
     * Set the variant of the count to use.
     *
     * @param variant the variant to use
     * @return this PeriodFormatterFactory
     */
    public PeriodFormatterFactory setCountVariant(int variant);

    /**
     * Return a formatter based on this factory's current settings.
     *
     * @return a PeriodFormatter
     */
    public PeriodFormatter getFormatter();
}
